package jdbc01;
/**
 * 利用 PreparedStatement 做 CRUD(Create,Read,Update,Delete 增删改查)
 * Connection 接口中的方法:
 * PreparedStatement prepareStatement(String sql)
 * 创建一个 PreparedStatement 对象来将参数化的 SQL 语句发送到数据库。
 * PreparedStatement 接口中的方法
 * void setInt(int parameterIndex, int x)//void setXXX(int parameterIndex,XXX
 x) xxx 代表 MySQL 某种数据类型
 * 将指定参数设置为给定 Java int 值。
 * int executeUpdate():专门负责执行 INSERT,UPDATE,DELETE 语句
 *
 */
import org.junit.Test;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;

public class JDBCDemo01 {
    @Test
    public void testInsert() throws Exception {
        //1.注册驱动
        Class.forName("com.mysql.jdbc.Driver");

        //2.获取一个连接
        Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/test02?useSSL=false&characterEncoding=UTF-8",
                "root", "root");

        //3.通过连接获取执行预编译SQL的PreparedStatement
        //INSERT INTO product VALUES (13, '良品铺子抹茶饼干', 39.9, '休闲零食');
        //预编译 SQL 中所有的参数都用?占位符
        PreparedStatement ps = conn.prepareStatement("INSERT INTO product values (?,?,?,?)");

        //4.利用reparedStatement设置预编译SQL中？占位符的值
        ps.setInt(1, 13);
        ps.setString(2, "良品铺子抹茶饼干");
        ps.setDouble(3, 39.9);
        ps.setInt(4, 4);

        //5.利用 PreparedStatement 接口中的 executeUpdate()执行 SQL 语句
        int i = ps.executeUpdate();
        System.out.println(i);

        //6.释放资源
        conn.close();
        ps.close();
    }

    @Test
    public void testUpdate() throws Exception {
        //1.注册驱动
        Class.forName("com.mysql.jdbc.Driver");

        //2.获取一个连接
        Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/test02?useSSL=false&characterEncoding=UTF-8",
                "root", "root");

        //3.通过连接获取执行预编译SQL的PreparedStatement
        //预编译 SQL 中所有的参数都用?占位符
        PreparedStatement ps = conn.prepareStatement("UPDATE product SET pname = ? WHERE pid = ?");

        //4.利用reparedStatement设置预编译SQL中？占位符的值
        ps.setString(1,"三只松鼠抹茶饼干");
        ps.setInt(2, 13);

        //5.利用 PreparedStatement 接口中的 executeUpdate()执行 SQL 语句
        int i = ps.executeUpdate();
        System.out.println(i);

        //6.释放资源
        conn.close();
        ps.close();
    }

    @Test
    public void testDelete() throws Exception {
        //1.注册驱动
        Class.forName("com.mysql.jdbc.Driver");

        //2.获取一个连接
        Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/test02?useSSL=false&characterEncoding=UTF-8",
                "root", "root");

        //3.通过连接获取执行预编译SQL的PreparedStatement
        PreparedStatement ps = conn.prepareStatement("DELETE FROM product WHERE pid = ?");

        //4.利用reparedStatement设置预编译SQL中？占位符的值
        ps.setInt(1, 13);

        //5.利用 PreparedStatement 接口中的 executeUpdate()执行 SQL 语句
        int i = ps.executeUpdate();
        System.out.println(i);

        //6.释放资源
        conn.close();
        ps.close();
    }
}
